//
//  main.m
//  04-集合(二)
//
//  Created by dllo on 16/7/7.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
   // 1.字典
    // 存储键值对(key-value)的集合类型
    // 字典中存储数据没有顺序
    // 通过key值存储,查找 value
    // (1) 初始化
    // initWithObjectsAndKeys:value, key, value, key,.....
    // 字典中只能存放对象类型(NSObject的子类)
    // 如果出现汉字, 代码提示, 一定会失效
    NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
    // (2) 构造器
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: @"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
    // (3) 字面量 数值对象类型NSNumber @() 字符串@"" 数组@[] 字典@{}
    NSDictionary *diction = @{@"年龄" : @(18), @"name" : @"tang"};
   
    // (4) 取值
    // 1.通过key取value
    [dictionary objectForKey:@"name"];
    // 2.获取所有key值的方法
    NSArray *allKeys = dic.allKeys;
    // 3.获取所有的value
    NSArray *allValues = dic.allValues;
    // 4.count
    NSUInteger count = diction.count;
    // 5.
  NSArray *allValueArray = [diction objectsForKeys:allKeys notFoundMarker:@"notFind"];
  NSArray *allValuesArray = [diction objectsForKeys:allKeys notFoundMarker:[NSString class]];
  NSLog(@"%@ \n %@", allValueArray, allValuesArray);
    // 6.通过一个value 对象, 查找所有value是这个对象的key值.
  NSArray *tangArray = [diction allKeysForObject:@"tang"];
  NSLog(@"%@", tangArray);
    // 7.语法糖取值 arr[下标] diction[key]
  NSLog(@"%@", diction[@"name"]);
    
    // 可变字典 NSMutableDictionary
    // 1.初始化方式
    NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];
    //(不推荐使用字面量)
    NSMutableDictionary *mutableDiction = [@{}mutableCopy];
    // 2.取值 与不可变字典相同
    // 3.增 删 改
    // 添加 setObject:value forKey:key
    // 如果key只存在,会将之前的value覆盖
    // 如果key不存在,会直接添加
    // 注意: 字典中的key值不要重复,如果重复, 会以最后的value进行赋值
    [mutableDic setObject:@"我饿了" forKey:@"name"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectForKey:@"name"];
    [mutableDic removeObjectsForKeys:@[@"name"]];
    // 语法糖 与setObject:forKey相同
    mutableDic[@"name"] = @"jie";
    /*
     完成以下需求
     需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
     2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
     3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
     4、删除某个分组的全部联系人。
     */
   
    Contact *contact1  = [[Contact alloc] initWithName:@"xiao" phoneNumber:@"110"];
     contact1.groupName = @"Y";
    Contact *contact2 = [[Contact alloc] initWithName:@"tang" phoneNumber:@"120"];
    contact2.groupName = @"X";
    Contact *contact3  = [[Contact alloc] initWithName:@"zhang" phoneNumber:@"130"];
    contact3.groupName = @"z";
    Contact *contact4  = [[Contact alloc] initWithName:@"wang" phoneNumber:@"140"];
    contact4.groupName = @"m";
    Contact *contact5  = [[Contact alloc] initWithName:@"liu" phoneNumber:@"150"];
    contact5.groupName = @"n";
     [contact1 showContact];
   //2.
//    NSMutableDictionary *contPerDic = [NSMutableDictionary dictionary];
//    // key: A~Z value: NSMutableArray
//    if (contact.name.length > 0 && contact.phoneNumber.length > 0) {
//        // 都不是空值,可以添加
//        // 通过联系人的分组名, 取到对应的分组数组
//        NSMutableArray *contArr = [contPerDic objectForKey:contact.groupName];
//        // 判断数组是否存在
//        if (contArr == nil) {
//            //不存在创建
//            contArr = [NSMutableArray array];
//            [contArr addObject:contact];
//            [contPerDic setObject:contArr forKey:contact.groupName];
//        } else {
//            //存在, 直接添加
//            [contArr addObject:contact];
//            [contPerDic setObject:contArr forKey:contact.groupName];
//        }
//        NSLog(@"添加%@联系人成功", contact.name);
//        // 否则添加失败
//    } else {
//        NSLog(@"添加失败");
//    }
    
    NSMutableDictionary *contPerDic = [NSMutableDictionary dictionary];
    ContactManager *contactManager = [[ContactManager alloc]initWithDictionary:contPerDic];
    [contactManager addContact:contact1];
    [contactManager addContact:contact2];
    [contactManager addContact:contact3];
    [contactManager addContact:contact4];
    [contactManager addContact:contact5];
    NSLog(@"%@", contactManager.contactDictionary);
    //desciption 把一个东西转换成字符串.
    
    // 重用池是用集合写的
    // 2.集合
    // 不可变 NSSet 可变 NSMutableSet
    // (1) 初始化
    // 集合会删除掉重复的内容(互异性)
    // 要删除数组或者字典中重复的内容, 放入集合中
    NSSet *set = [[NSSet alloc] initWithObjects:@"sdf", @"sdf", nil];
    NSLog(@"%@",set);
    // (2) 构造器
    [NSSet setWithObjects:@"于涵", @"于涵", nil];
    // (3) 没有提供集合自变量
    
    // 取值
    // 从集合中取出任意元素
    [set anyObject];
    
    // count
    NSUInteger setCount = set.count;
    // 集合去重(删除数组中重复的元素)
    NSArray *repeatArray = @[@10, @20, @30, @100, @10];
    NSSet *repeatSet = [NSSet setWithArray:repeatArray];
    repeatArray = repeatSet.allObjects;
    NSLog(@"%@",repeatArray);
    
    // 可变集合 NSMutableSet
    // (1) 初始化与不可变集合一样
    // (2) 取值 anyObject
    // (3) 可变集合 可变性
    
    NSMutableSet *mutableSet = [NSMutableSet set];
    [mutableSet addObject:@"123"];
    [mutableSet removeObject:@"123"];
    [mutableSet removeAllObjects];
    return 0;
}
